package com.sykuku.common;
import com.sykuku.controller.expection.BusinessException;
import com.sykuku.controller.expection.SystemException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
@RestControllerAdvice
@Slf4j
 //用于标识当前类为REST风格对应的异常处理器 集合 返回 配置 成为bean
//要是放在其他包中需要扫描
public class ProjectExceptionAdvice {

    //@ExceptionHandler用于设置当前处理器类对应的异常类型
    @ExceptionHandler(SystemException.class)//自定义异常处理器
    public R<String> doSystemException(SystemException ex) {
        ex.printStackTrace();
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        log.error("业务异常:{}",ex.getMessage());
        return R.error("错误");
    }

    @ExceptionHandler(BusinessException.class)//自定义异常处理器
    public R<String> doBusinessException(BusinessException ex) {
        ex.printStackTrace();
        return R.error(ex.getMessage());
    }

    //除了自定义的异常处理器，保留对Exception类型的异常处理，用于处理非预期的异常
    @ExceptionHandler(Exception.class)
    public R<String> doOtherException(Exception ex) {
        ex.printStackTrace();
        //记录日志
        //发送消息给运维
        //发送邮件给开发人员,ex对象发送给开发人员
        return R.error("这个错误大的一批");//ex.getClass
    }
}